%% 图像处理
close all; clc; clear;
img = imread("zyx.jpg");  % img是已经加载的图像变量
img = rgb2gray(img);

%% 编程直方图
%根据直方图定义，通过结构化编程方式给出2-1）中灰度图像像素点统计形式的直方图

% % 确保是灰度图像
% if size(img, 3) == 3
%     img = rgb2gray(img);
% end

[height, width] = size(img);% 获取图像尺寸

% 初始化灰度级计数器
grayLevels = 0:255; % 从0到255的灰度级
pixelCounts = zeros(1, 256); % 初始化计数数组

% 遍历图像，计算每个灰度级的像素数量
for i = 1:height
    for j = 1:width
        pixelCounts(img(i,j)+1) = pixelCounts(img(i,j)+1) + 1; % 注意加1是因为MATLAB索引从1开始
    end
end

% 绘制 编程直方图
figure('Name', '编程直方图', 'NumberTitle', 'off', 'toolbar', 'none', 'menubar', 'none');
bar(grayLevels, pixelCounts, 'EdgeColor', 'none','BarWidth',0.3); % 使用bar函数绘制直方图，不显示柱状边缘颜色以美化图形
% axis tight; % 紧凑布局，确保x轴范围准确对应灰度级
% xlim([0 255]); % 设置x轴限，确保覆盖所有灰度级
% ylim([0 6000]); % 设置x轴限，确保覆盖所有灰度级

%% 函数调用直方图
figure('Name', '函数调用直方图', 'NumberTitle', 'off', 'toolbar', 'none', 'menubar', 'none');
imhist(img);
